import QtQuick 2.15
import QtQuick.Controls 2.15

Item {
    id: root
    
    property string text: ""
    property color textColor: "#01EEC3"
    property int fontSize: 14
    property string fontFamily: "Microsoft YaHei"
    property int scrollSpeed: 1  // 每次移动的像素数
    property int scrollInterval: 10  // 更新间隔（毫秒）
    
    clip: true
    
    // 文本内容
    property string displayText: text
    
    // 文本位置
    property real textX: width
    
    // 文本宽度
    property real textWidth: 0
    
    // 定时器用于滚动
    Timer {
        id: scrollTimer
        interval: root.scrollInterval
        running: root.visible && root.text !== ""
        repeat: true
        
        onTriggered: {
            // 计算文本宽度（如果还未计算）
            if (textWidth === 0 && textMetrics.width > 0) {
                textWidth = textMetrics.width
                textX = root.width
            }
            
            // 更新位置
            textX -= scrollSpeed
            
            // 如果文本完全滚出左侧，重置到右侧
            if (textX <= -textWidth) {
                textX = root.width
            }
        }
    }
    
    // 文本度量，用于计算文本宽度
    TextMetrics {
        id: textMetrics
        font.family: root.fontFamily
        font.pixelSize: root.fontSize
        text: root.displayText
    }
    
    // 绘制文本
    Text {
        id: textItem
        x: root.textX
        y: (parent.height - height) / 2
        text: root.displayText
        font.family: root.fontFamily
        font.pixelSize: root.fontSize
        color: root.textColor
        verticalAlignment: Text.AlignVCenter
    }
    
    // 当文本改变时，重置位置
    onTextChanged: {
        if (text === "") {
            textX = root.width
            textWidth = 0
        } else {
            // 延迟计算文本宽度，等待 TextMetrics 更新
            Qt.callLater(function() {
                if (textMetrics.width > 0) {
                    textWidth = textMetrics.width
                    textX = root.width
                }
            })
        }
    }
    
    // 当组件可见性改变时，重置位置
    onVisibleChanged: {
        if (visible && text !== "") {
            textX = root.width
            if (textMetrics.width > 0) {
                textWidth = textMetrics.width
            }
        }
    }
    
    // 当组件宽度改变时，重新初始化位置
    onWidthChanged: {
        if (visible && text !== "") {
            textX = root.width
            if (textMetrics.width > 0) {
                textWidth = textMetrics.width
            }
        }
    }
}

